/**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: ShoppingCart
 * Author:   zhouheng
 * Date:     2019/5/1 21:28
 * Description: 购物车
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.zhouh.patterns.com.zhouh.action.template;

import com.zhouh.patterns.com.zhouh.action.strategy.Discount;
import com.zhouh.patterns.com.zhouh.entity.Fruit;

import java.util.DoubleSummaryStatistics;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 〈一句话功能简述〉<br> 
 * 〈模板方法模式 购物车费用结算过程〉
 *
 * @author zhouheng
 * @create 2019/5/1
 * @since 1.0.0
 */
public abstract class ShoppingCart {
    // 商品折扣，策略模式
    private Discount discount;
    // 水果
    private List<Fruit> fruits;

    public void setDiscount(Discount discount) {
        this.discount = discount;
    }

    public ShoppingCart(List<Fruit> fruits) {
        this.fruits = fruits;
    }

    // 提交订单主流程
    public void submitOrder(){
        // 1.计算商品金额
        int money = balance();
        System.out.println("商品总金额为："+money+"元");
        // 2. 优惠减免
        money = discount.calculate(money);
        System.out.println("优惠减免后："+ money+"元，");
        // 3. 支付
        pay(money);
        // 4. 送货上门
        sendHome();
    }

    // 计算金额
    public int balance(){
        fruits.stream().map(Fruit::price).forEach(System.out::println);
        int sumMoney  =
                fruits.stream().map(Fruit::price).reduce(0, (a,b)->a+b);
        return sumMoney;
    }

    // 支付
    public abstract void pay(int money);

    // 送货上门
    public void sendHome(){
        System.out.println("送货上门。。。");
    }

}